package 享元模式;


//所谓享元模式就是运行共享技术有效地支持大量细粒度对象的复用。
//享元模式要求能够共享的对象必须是细粒度对象。
//内部状态存储于享元对象内部，而外部状态则应该由客户端来考虑。

//享元模式的核心在于享元工厂类，享元工厂类的作用在于提供一个用于存储享元对象的享元池，用户需要对象时，
//首先从享元池中获取，如果享元池中不存在，则创建一个新的享元对象返回给用户，并在享元池中保存该新增对象。
public class MainClass {
	public static void main(String[] args) throws Exception {
		Shape shape1 = FlyweightFactory.getShape("红色");
        shape1.draw();
        
        Shape shape2 = FlyweightFactory.getShape("灰色");
        shape2.draw();
        
        Shape shape3 = FlyweightFactory.getShape("绿色");
        shape3.draw();
        
        Shape shape4 = FlyweightFactory.getShape("红色");
        shape4.draw();
        
        Shape shape5 = FlyweightFactory.getShape("灰色");
        shape5.draw();
        
        Shape shape6 = FlyweightFactory.getShape("灰色");
        shape6.draw();
        
        System.out.println("一共绘制了"+FlyweightFactory.size()+"中颜色的圆形");
		
	}
}
